﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DAO;
using APA_DAO;
using TAM_SPORT;

namespace AMS
{
    public partial class FrmChiTieu : Form
    {
        public FrmChiTieu()
        {
            InitializeComponent();
            loadPhong();
            loadLoaiChi();
            txtNgayChi.Text = DateTime.Now.ToString("dd/MM/yyyy");
            lblPayPerson.Text = LoginDao.fullName;
            this.BackColor = Color.LightCyan;
            
        }

        private int id = 0;
        public FrmChiTieu(int id)
        {
            InitializeComponent();
            loadPhong();
            loadLoaiChi();
            this.id = id;
            loadChiTieu(id);
            this.BackColor = Color.LightCyan;
            
        }

        private void loadChiTieu(int id)
        {
            ChiTieuDao dao = new ChiTieuDao();
            DataRow row = dao.getChiTieuById(id);
            if (row != null)
            {
                lblPayPerson.Text = row["FULL_NAME"].ToString();
                txtReason.Text = row["MUC_DICH"].ToString();
                txtTotal.Text = row["SO_TIEN"] == System.DBNull.Value ? "" : float.Parse(row["SO_TIEN"].ToString()).ToString("#,##0.##");
                txtNotes.Text = row["NOTES"].ToString();
                if (row["SO_THUE_PHONG"] != System.DBNull.Value)
                {
                    cbxRoom.SelectedValue = int.Parse(row["SO_THUE_PHONG"].ToString());
                }
                else
                {
                    cbxRoom.SelectedIndex = 0;
                }
                if (row["LOAI_CHI"] != System.DBNull.Value)
                {
                    cbxLoaiChi.SelectedValue = int.Parse(row["LOAI_CHI"].ToString());
                }
                txtNgayChi.Text = row["NGAY_CHI"] == System.DBNull.Value ? "" : DateTime.Parse(row["NGAY_CHI"].ToString()).ToString("dd/MM/yyyy");
            }
        }

        private void loadLoaiChi()
        {
            ChiTieuDao dao = new ChiTieuDao();
            DataTable table = dao.getLoaiChi(0);
            if (table != null)
            {
                cbxLoaiChi.DataSource = table;
                cbxLoaiChi.DisplayMember = "NAME";
                cbxLoaiChi.ValueMember = "ID";
                cbxLoaiChi.SelectedIndex = 0;
            }
        }
        private void loadPhong()
        {
            PhongDao dao = new PhongDao();
            DataTable table = dao.getPhongWithThuePhong();
            if (table != null)
            {
                DataRow row = table.NewRow();
                row["ID"] = 0;
                row["SO_PHONG"] = "Không chọn phòng";
                table.Rows.InsertAt(row, 0);
                cbxRoom.DataSource = table;
                cbxRoom.DisplayMember = "SO_PHONG";
                cbxRoom.ValueMember = "ID";
                cbxRoom.SelectedIndex = 0;
            }
        }

        public bool validate()
        {
            bool errFlg = false;
            StringBuilder strBuilder = new StringBuilder();
            int i = 0;
            if (string.IsNullOrEmpty(txtTotal.Text))
            {
                i++;
                strBuilder.Append(i + ". Bạn cần phải nhập tổng tiền chi");
                errFlg = true;
            }

            float total = 0;
            if(!float.TryParse(txtTotal.Text.Replace(",", ""), out total))
            {
                i++;
                if(errFlg)
                {
                    strBuilder.Append("\n");
                }
                strBuilder.Append(i + ". Tồng chi phải là ký tự số");
                errFlg = true;
            }

            
            if (string.IsNullOrEmpty(txtReason.Text))
            {
                i++;
                if (errFlg)
                {
                    strBuilder.Append("\n");
                }
                strBuilder.Append(i + ". Bạn vui lòng nhập mục đích chi.");
                errFlg = true;
            }           

            if (string.IsNullOrEmpty(txtNgayChi.Text))
            {
                i++;
                if (errFlg)
                {
                    strBuilder.Append("\n");
                }
                strBuilder.Append(i.ToString() + ". Chưa nhập ngày chi tiền. Vui lòng nhập ngày chi");
                errFlg = true;

            }
            else
            {
                DateTime payDate;
                if (!DateTime.TryParseExact(txtNgayChi.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out payDate))
                {
                    i++;
                    if (errFlg)
                    {
                        strBuilder.Append("\n");
                    }
                    strBuilder.Append(i.ToString() + ". Ngày chi sai định dạng, vui lòng nhập lại ngày chi (ngày/tháng/năm).");
                    errFlg = true;
                }
            }
            if (!string.IsNullOrEmpty(strBuilder.ToString()))
            {
                Error er = new Error(strBuilder.ToString());
                er.ShowDialog();
                er.Dispose();
            }
            return !errFlg;
        }

        private void dtPayDate_ValueChanged(object sender, EventArgs e)
        {
            txtNgayChi.Text = dtPayDate.Value.ToString("dd/MM/yyyy");
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            if (validate())
            {
                float total = float.Parse(txtTotal.Text.Replace(",", ""));
                DateTime payDate;
                DateTime.TryParseExact(txtNgayChi.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out payDate);

                ChiTieuDao dao = new ChiTieuDao();
                if (this.id > 0)
                {
                    if (dao.updateChiTieu(this.id, txtReason.Text.Trim(), total, payDate, int.Parse(cbxLoaiChi.SelectedValue.ToString()),int.Parse(cbxRoom.SelectedValue.ToString()), txtNotes.Text.Trim()))
                    {
                        Result re = new Result("Lưu thành công.");
                        re.ShowDialog();
                        re.Dispose();
                        this.Close();
                    }
                    else
                    {
                        Error er = new Error("Lưu thất bại.");
                        er.ShowDialog();
                        er.Dispose();
                    }
                }
                else
                {

                    if (dao.insertChiTieu(txtReason.Text.Trim(), total, payDate, int.Parse(cbxRoom.SelectedValue.ToString()),int.Parse(cbxLoaiChi.SelectedValue.ToString()), txtNotes.Text.Trim()))
                    {
                        Result re = new Result("Lưu thành công.");
                        re.ShowDialog();
                        re.Dispose();
                        txtNgayChi.Text = DateTime.Now.ToString("dd/MM/yyyy");
                        txtReason.Text = "";
                        txtNotes.Text = "";
                        txtTotal.Text = "";
                    }
                    else
                    {
                        Error er = new Error("Lưu thất bại.");
                        er.ShowDialog();
                        er.Dispose();
                    }
                }
            }
        }

        private void txtTotal_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private String RemoveComma(String value)
        {
            if (value != null && value.Contains(","))
            {
                value = value.Replace(",", String.Empty).Trim();
            }
            return value;
        }

        private void txtTotal_TextChanged(object sender, EventArgs e)
        {
            if (RemoveComma(txtTotal.Text).Length > 3)
            {
                txtTotal.Text = decimal.Parse(RemoveComma(txtTotal.Text)).ToString("#,###");
                txtTotal.Select(txtTotal.Text.Length, 0);
            }
        }

    }
}
